package com.starmark.gateway.auth.provider.service;


import com.starmark.core.framework.base.BaseService;
import com.starmark.gateway.auth.provider.entity.GatewayAuthRole;
import com.starmark.gateway.auth.provider.vo.AuthOrgElementDto;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author starmark
 * @since 2018-04-27
 */
public interface IGatewayAuthRoleService extends BaseService<GatewayAuthRole> {

    /**
     * 通过组织ID,查找对应的角色数据
     *
     * @param orgIds 组织ID
     * @param projectCode  工程编码
     * @return 角色ID主键
     */
    Set<String> getRoleIdsByOrgId(List<String> orgIds,String projectCode);


    /**
     * 判断当前用户是否超管
     * @param orgId 用户ID
     * @param projectCode  工程编码
     * @return 是否超级管理员
     */
    boolean isAdmin(String orgId,String projectCode);

    /**
     * 通过角色ID查找对应的资源
     *
     * @param roleId 角色ID
     * @return  资源ID数据
     */
    List<String> getRoleResource(String roleId);


    /**
     * 角色授权
     *
     * @param roleId 角色ID
     * @param entityIds 授权的资源数据
     */
    void grantAuthToRole(String roleId, List<String> entityIds);




    /**
     * 获取组织下的人员数据
     *
     * @param roleId 角色ID
     * @return 角色下的人员数据
     */
    List<AuthOrgElementDto> getRoleOrg(String roleId);

    /**
     * 角色授权
     *
     * @param roleId 角色ID
     * @param orgElementDtos 组织数据
     */
    void grantAuthOrgRole(String roleId, List<AuthOrgElementDto> orgElementDtos);



    /**
     * 重新加载网关路由配置角色到redis
     * @return 成功返回true
     */
    boolean overload();

}
